#include <iostream>

using namespace std;

const int N = int(1e6 + 10);

int q[N], a[N];
int hh = 0, tt = 0;

int main(void)
{
    int n, k;
    scanf("%d%d", &n, &k);
    for (int i = 0; i < n; i++) scanf("%d", &a[i]);
    
    for (int i = 0; i < n; i++)
    {// 存的是下标, 便于判断栈底是否还在窗口中, 不在要踢出栈
        if (q[hh] == i - k) hh++;
        while (hh!=tt && a[q[tt - 1]] >= a[i]) tt--;
        q[tt++] = i;
        if (i >= k - 1)
            printf("%d ", a[q[hh]]);
    }
    hh = tt = 0;
    printf("\n");
    for (int i = 0; i < n; i++)
    {// 存的是下标, 便于判断栈底是否还在窗口中, 不在要踢出栈
        if (q[hh] == i - k) hh++;
        while (hh!=tt && a[q[tt - 1]] <= a[i]) tt--;
        q[tt++] = i;
        if (i >= k - 1)
            printf("%d ", a[q[hh]]);
    }
}